Loading the Expression Data
The expression data are taken from this study: https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE232211
fhc.expression <- read.delim(paste0(DATA_DIR, "GSE232211_norm_counts_TPM_GRCh38.p13_NCBI.tsv"), as.is = TRUE, header = TRUE, row.names = 1)
fhc.expression <- rownames_to_column(fhc.expression, "gene_id")
fhc.expression
mapping_table <- read.delim(paste0(DATA_DIR, "Human.GRCh38.p13.annot.tsv"), as.is = TRUE, header = TRUE, row.names = 1)
mapping_table <- rownames_to_column(mapping_table, "gene_id")
mapping_table <- subset(mapping_table, EnsemblGeneID != "")
mapping_table
Since the gene set for the RCD-related regulators (taken from RCDdb)
uses Ensembl Gene IDs, we need to map the accessions.
fhc.expression.mapped <- right_join(fhc.expression, mapping_table, by = join_by(gene_id == gene_id)) %>% distinct(EnsemblGeneID, .keep_all = TRUE)
rownames(fhc.expression.mapped) <- fhc.expression.mapped$EnsemblGeneID
fhc.expression.mapped = fhc.expression.mapped[,!(names(fhc.expression.mapped) %in% colnames(mapping_table))]
fhc.expression.mapped <- rownames_to_column(fhc.expression.mapped, "gene_id")
fhc.expression.mapped
Exploratory Data Analysis
We load the gene sets from RCDdb: https://pubmed.ncbi.nlm.nih.gov/39257527/
RCDdb <- "../data/public/rcd-gene-list/RCDdb/"
Necroptosis
Load the gene set.
genes <- read.csv(paste0(RCDdb, "Necroptosis.csv"))
genes$gene_id <- cleanid(genes$gene_id)
genes <- distinct(genes, gene_id, .keep_all = TRUE)
genes <- subset(genes, gene_id != "")
genes
Get the TPM for the genes in the gene set.
tpm.df <- fhc.expression.mapped %>% dplyr::filter(gene_id %in% genes$gene_id)
tpm.df <- left_join(tpm.df, genes %>% dplyr::select(gene_id, gene), by = c("gene_id" = "gene_id"))
rownames(tpm.df) <- tpm.df$gene
tpm.df <- tpm.df %>% dplyr::select(c(1:4))
tpm.df <- subset(tpm.df, select = -c(gene_id) )
tpm.df <- tpm.df[ order(row.names(tpm.df)), ]
tpm.df
Plot the results.
tpm.matrix <- as.matrix(tpm.df)
heatmap.2(tpm.matrix, srtCol=360, cellnote = tpm.matrix, dendrogram="none", Colv=FALSE, Rowv=FALSE,
col=brewer.pal(n = 9, name = "BuPu")[5:9], trace="none", key = FALSE, lwid=c(0.1,4), lhei=c(0.1,4),
cexCol=1, cexRow=0.75, symm = TRUE)

Ferroptosis
Load the gene set.
genes <- read.csv(paste0(RCDdb, "Ferroptosis.csv"))
genes$gene_id <- cleanid(genes$gene_id)
genes <- distinct(genes, gene_id, .keep_all = TRUE)
genes <- subset(genes, gene_id != "")
genes
Get the TPM for the genes in the gene set.
tpm.df <- fhc.expression.mapped %>% dplyr::filter(gene_id %in% genes$gene_id)
tpm.df <- left_join(tpm.df, genes %>% dplyr::select(gene_id, gene), by = c("gene_id" = "gene_id"))
rownames(tpm.df) <- tpm.df$gene
tpm.df <- tpm.df %>% dplyr::select(c(1:4))
tpm.df <- subset(tpm.df, select = -c(gene_id) )
tpm.df <- tpm.df[ order(row.names(tpm.df)), ]
tpm.df
Plot the results.
tpm.matrix <- as.matrix(tpm.df)
heatmap.2(tpm.matrix, srtCol=360, cellnote = tpm.matrix, dendrogram="none", Colv=FALSE, Rowv=FALSE,
col=brewer.pal(n = 9, name = "BuPu")[5:9], trace="none", key = FALSE, lwid=c(0.1,4), lhei=c(0.1,4),
cexCol=1, cexRow=0.75, symm = TRUE)

Pyroptosis
Load the gene set.
genes <- read.csv(paste0(RCDdb, "Pyroptosis.csv"))
genes$gene_id <- cleanid(genes$gene_id)
genes <- distinct(genes, gene_id, .keep_all = TRUE)
genes <- subset(genes, gene_id != "")
genes
Get the TPM for the genes in the gene set.
tpm.df <- fhc.expression.mapped %>% dplyr::filter(gene_id %in% genes$gene_id)
tpm.df <- left_join(tpm.df, genes %>% dplyr::select(gene_id, gene), by = c("gene_id" = "gene_id"))
rownames(tpm.df) <- tpm.df$gene
tpm.df <- tpm.df %>% dplyr::select(c(1:4))
tpm.df <- subset(tpm.df, select = -c(gene_id) )
tpm.df <- tpm.df[ order(row.names(tpm.df)), ]
tpm.df
Plot the results.
tpm.matrix <- as.matrix(tpm.df)
heatmap.2(tpm.matrix, srtCol=360, cellnote = tpm.matrix, dendrogram="none", Colv=FALSE, Rowv=FALSE,
col=brewer.pal(n = 9, name = "BuPu")[5:9], trace="none", key = FALSE, lwid=c(0.1,4), lhei=c(0.1,4),
cexCol=1, cexRow=0.75, symm = TRUE)

LS0tDQp0aXRsZTogIkdlbmUgRXhwcmVzc2lvbiBBbmFseXNpcyINCnN1YnRpdGxlOiAiRmV0YWwgY29sb24gY2VsbCBsaW5lIEZIQyB8IE5lY3JvcHRvc2lzLCBGZXJyb3B0b3NpcyAmIFB5cm9wdG9zaXMiDQphdXRob3I6IA0KICAtIE1hcmsgRWR3YXJkIE0uIEdvbnphbGVzXltEZSBMYSBTYWxsZSBVbml2ZXJzaXR5LCBNYW5pbGEsIFBoaWxpcHBpbmVzLCBnb256YWxlcy5tYXJrZWR3YXJkQGdtYWlsLmNvbV0NCiAgLSBEci4gQW5pc2ggTS5TLiBTaHJlc3RoYV5bRGUgTGEgU2FsbGUgVW5pdmVyc2l0eSwgTWFuaWxhLCBQaGlsaXBwaW5lcywgYW5pc2guc2hyZXN0aGFAZGxzdS5lZHUucGhdDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyBJLiBQcmVsaW1pbmFyaWVzDQoNCiMjIyBMb2FkaW5nIGxpYnJhcmllcw0KDQpgYGB7ciwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KCJ0aWJibGUiKQ0KbGlicmFyeSgibXNpZ2RiciIpDQpsaWJyYXJ5KCJnZ3Bsb3QyIikNCmxpYnJhcnkoImVuc2VtYmxkYiIpDQpsaWJyYXJ5KCJwdXJyciIpDQpsaWJyYXJ5KCJtYWdyaXR0ciIpDQpsaWJyYXJ5KCJtYXRyaXhTdGF0cyIpDQpsaWJyYXJ5KCJkcGx5ciIpDQpsaWJyYXJ5KCJncmV4IikNCmxpYnJhcnkoImdwbG90cyIpDQpsaWJyYXJ5KCJSQ29sb3JCcmV3ZXIiKQ0KYGBgDQoNCiMjIyBDb25zdGFudHMNCmBgYHtyfQ0KREFUQV9ESVIgPC0gIi4uL2RhdGEvcHVibGljL0dFTy9GSEMvIg0KYGBgDQoNCiMjIExvYWRpbmcgdGhlIEV4cHJlc3Npb24gRGF0YQ0KDQpUaGUgZXhwcmVzc2lvbiBkYXRhIGFyZSB0YWtlbiBmcm9tIHRoaXMgc3R1ZHk6IGh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvZ2VvL3F1ZXJ5L2FjYy5jZ2k/YWNjPUdTRTIzMjIxMQ0KDQpgYGB7cn0NCmZoYy5leHByZXNzaW9uIDwtIHJlYWQuZGVsaW0ocGFzdGUwKERBVEFfRElSLCAiR1NFMjMyMjExX25vcm1fY291bnRzX1RQTV9HUkNoMzgucDEzX05DQkkudHN2IiksIGFzLmlzID0gVFJVRSwgaGVhZGVyID0gVFJVRSwgcm93Lm5hbWVzID0gMSkNCmZoYy5leHByZXNzaW9uIDwtIHJvd25hbWVzX3RvX2NvbHVtbihmaGMuZXhwcmVzc2lvbiwgImdlbmVfaWQiKQ0KZmhjLmV4cHJlc3Npb24NCmBgYA0KYGBge3J9DQptYXBwaW5nX3RhYmxlIDwtIHJlYWQuZGVsaW0ocGFzdGUwKERBVEFfRElSLCAiSHVtYW4uR1JDaDM4LnAxMy5hbm5vdC50c3YiKSwgYXMuaXMgPSBUUlVFLCBoZWFkZXIgPSBUUlVFLCByb3cubmFtZXMgPSAxKQ0KbWFwcGluZ190YWJsZSA8LSByb3duYW1lc190b19jb2x1bW4obWFwcGluZ190YWJsZSwgImdlbmVfaWQiKQ0KbWFwcGluZ190YWJsZSA8LSBzdWJzZXQobWFwcGluZ190YWJsZSwgRW5zZW1ibEdlbmVJRCAhPSAiIikNCm1hcHBpbmdfdGFibGUNCmBgYA0KU2luY2UgdGhlIGdlbmUgc2V0IGZvciB0aGUgUkNELXJlbGF0ZWQgcmVndWxhdG9ycyAodGFrZW4gZnJvbSBSQ0RkYikgdXNlcyBFbnNlbWJsIEdlbmUgSURzLCB3ZSBuZWVkIHRvIG1hcCB0aGUgYWNjZXNzaW9ucy4NCg0KYGBge3J9DQpmaGMuZXhwcmVzc2lvbi5tYXBwZWQgPC0gIHJpZ2h0X2pvaW4oZmhjLmV4cHJlc3Npb24sIG1hcHBpbmdfdGFibGUsIGJ5ID0gam9pbl9ieShnZW5lX2lkID09IGdlbmVfaWQpKSAlPiUgZGlzdGluY3QoRW5zZW1ibEdlbmVJRCwgLmtlZXBfYWxsID0gVFJVRSkNCnJvd25hbWVzKGZoYy5leHByZXNzaW9uLm1hcHBlZCkgPC0gZmhjLmV4cHJlc3Npb24ubWFwcGVkJEVuc2VtYmxHZW5lSUQNCmZoYy5leHByZXNzaW9uLm1hcHBlZCA9IGZoYy5leHByZXNzaW9uLm1hcHBlZFssIShuYW1lcyhmaGMuZXhwcmVzc2lvbi5tYXBwZWQpICVpbiUgY29sbmFtZXMobWFwcGluZ190YWJsZSkpXQ0KZmhjLmV4cHJlc3Npb24ubWFwcGVkIDwtIHJvd25hbWVzX3RvX2NvbHVtbihmaGMuZXhwcmVzc2lvbi5tYXBwZWQsICJnZW5lX2lkIikNCmZoYy5leHByZXNzaW9uLm1hcHBlZA0KYGBgDQoNCiMjIEV4cGxvcmF0b3J5IERhdGEgQW5hbHlzaXMNCg0KV2UgbG9hZCB0aGUgZ2VuZSBzZXRzIGZyb20gUkNEZGI6IGh0dHBzOi8vcHVibWVkLm5jYmkubmxtLm5paC5nb3YvMzkyNTc1MjcvDQoNCmBgYHtyfQ0KUkNEZGIgPC0gIi4uL2RhdGEvcHVibGljL3JjZC1nZW5lLWxpc3QvUkNEZGIvIg0KYGBgDQoNCiMjIyBOZWNyb3B0b3Npcw0KDQpMb2FkIHRoZSBnZW5lIHNldC4NCg0KYGBge3J9DQpnZW5lcyA8LSByZWFkLmNzdihwYXN0ZTAoUkNEZGIsICJOZWNyb3B0b3Npcy5jc3YiKSkNCmdlbmVzJGdlbmVfaWQgPC0gY2xlYW5pZChnZW5lcyRnZW5lX2lkKQ0KZ2VuZXMgPC0gZGlzdGluY3QoZ2VuZXMsIGdlbmVfaWQsIC5rZWVwX2FsbCA9IFRSVUUpDQpnZW5lcyA8LSBzdWJzZXQoZ2VuZXMsIGdlbmVfaWQgIT0gIiIpDQpnZW5lcw0KYGBgDQoNCkdldCB0aGUgVFBNIGZvciB0aGUgZ2VuZXMgaW4gdGhlIGdlbmUgc2V0Lg0KDQpgYGB7cn0NCnRwbS5kZiA8LSBmaGMuZXhwcmVzc2lvbi5tYXBwZWQgJT4lIGRwbHlyOjpmaWx0ZXIoZ2VuZV9pZCAlaW4lIGdlbmVzJGdlbmVfaWQpDQp0cG0uZGYgPC0gbGVmdF9qb2luKHRwbS5kZiwgZ2VuZXMgJT4lIGRwbHlyOjpzZWxlY3QoZ2VuZV9pZCwgZ2VuZSksIGJ5ID0gYygiZ2VuZV9pZCIgPSAiZ2VuZV9pZCIpKQ0Kcm93bmFtZXModHBtLmRmKSA8LSB0cG0uZGYkZ2VuZQ0KdHBtLmRmIDwtIHRwbS5kZiAlPiUgZHBseXI6OnNlbGVjdChjKDE6NCkpDQp0cG0uZGYgPC0gc3Vic2V0KHRwbS5kZiwgc2VsZWN0ID0gLWMoZ2VuZV9pZCkgKQ0KdHBtLmRmIDwtIHRwbS5kZlsgb3JkZXIocm93Lm5hbWVzKHRwbS5kZikpLCBdDQp0cG0uZGYNCmBgYA0KDQpQbG90IHRoZSByZXN1bHRzLg0KDQpgYGB7ciwgZmlnLmhlaWdodD0zMCwgZmlnLndpZHRoPTEwfQ0KdHBtLm1hdHJpeCA8LSBhcy5tYXRyaXgodHBtLmRmKQ0KaGVhdG1hcC4yKHRwbS5tYXRyaXgsIHNydENvbD0zNjAsIGNlbGxub3RlID0gdHBtLm1hdHJpeCwgZGVuZHJvZ3JhbT0ibm9uZSIsIENvbHY9RkFMU0UsIFJvd3Y9RkFMU0UsDQogICAgICAgICAgY29sPWJyZXdlci5wYWwobiA9IDksIG5hbWUgPSAiQnVQdSIpWzU6OV0sIHRyYWNlPSJub25lIiwga2V5ID0gRkFMU0UsIGx3aWQ9YygwLjEsNCksIGxoZWk9YygwLjEsNCksDQogICAgICAgICAgY2V4Q29sPTEsIGNleFJvdz0wLjc1LCBzeW1tID0gVFJVRSkNCmBgYA0KIyMjIEZlcnJvcHRvc2lzDQoNCkxvYWQgdGhlIGdlbmUgc2V0Lg0KDQpgYGB7cn0NCmdlbmVzIDwtIHJlYWQuY3N2KHBhc3RlMChSQ0RkYiwgIkZlcnJvcHRvc2lzLmNzdiIpKQ0KZ2VuZXMkZ2VuZV9pZCA8LSBjbGVhbmlkKGdlbmVzJGdlbmVfaWQpDQpnZW5lcyA8LSBkaXN0aW5jdChnZW5lcywgZ2VuZV9pZCwgLmtlZXBfYWxsID0gVFJVRSkNCmdlbmVzIDwtIHN1YnNldChnZW5lcywgZ2VuZV9pZCAhPSAiIikNCmdlbmVzDQpgYGANCg0KR2V0IHRoZSBUUE0gZm9yIHRoZSBnZW5lcyBpbiB0aGUgZ2VuZSBzZXQuDQoNCmBgYHtyfQ0KdHBtLmRmIDwtIGZoYy5leHByZXNzaW9uLm1hcHBlZCAlPiUgZHBseXI6OmZpbHRlcihnZW5lX2lkICVpbiUgZ2VuZXMkZ2VuZV9pZCkNCnRwbS5kZiA8LSBsZWZ0X2pvaW4odHBtLmRmLCBnZW5lcyAlPiUgZHBseXI6OnNlbGVjdChnZW5lX2lkLCBnZW5lKSwgYnkgPSBjKCJnZW5lX2lkIiA9ICJnZW5lX2lkIikpDQpyb3duYW1lcyh0cG0uZGYpIDwtIHRwbS5kZiRnZW5lDQp0cG0uZGYgPC0gdHBtLmRmICU+JSBkcGx5cjo6c2VsZWN0KGMoMTo0KSkNCnRwbS5kZiA8LSBzdWJzZXQodHBtLmRmLCBzZWxlY3QgPSAtYyhnZW5lX2lkKSApDQp0cG0uZGYgPC0gdHBtLmRmWyBvcmRlcihyb3cubmFtZXModHBtLmRmKSksIF0NCnRwbS5kZg0KYGBgDQoNClBsb3QgdGhlIHJlc3VsdHMuDQoNCmBgYHtyLCBmaWcuaGVpZ2h0PTE1MCwgZmlnLndpZHRoPTEwfQ0KdHBtLm1hdHJpeCA8LSBhcy5tYXRyaXgodHBtLmRmKQ0KaGVhdG1hcC4yKHRwbS5tYXRyaXgsIHNydENvbD0zNjAsIGNlbGxub3RlID0gdHBtLm1hdHJpeCwgZGVuZHJvZ3JhbT0ibm9uZSIsIENvbHY9RkFMU0UsIFJvd3Y9RkFMU0UsDQogICAgICAgICAgY29sPWJyZXdlci5wYWwobiA9IDksIG5hbWUgPSAiQnVQdSIpWzU6OV0sIHRyYWNlPSJub25lIiwga2V5ID0gRkFMU0UsIGx3aWQ9YygwLjEsNCksIGxoZWk9YygwLjEsNCksDQogICAgICAgICAgY2V4Q29sPTEsIGNleFJvdz0wLjc1LCBzeW1tID0gVFJVRSkNCmBgYA0KDQojIyMgUHlyb3B0b3Npcw0KDQpMb2FkIHRoZSBnZW5lIHNldC4NCg0KYGBge3J9DQpnZW5lcyA8LSByZWFkLmNzdihwYXN0ZTAoUkNEZGIsICJQeXJvcHRvc2lzLmNzdiIpKQ0KZ2VuZXMkZ2VuZV9pZCA8LSBjbGVhbmlkKGdlbmVzJGdlbmVfaWQpDQpnZW5lcyA8LSBkaXN0aW5jdChnZW5lcywgZ2VuZV9pZCwgLmtlZXBfYWxsID0gVFJVRSkNCmdlbmVzIDwtIHN1YnNldChnZW5lcywgZ2VuZV9pZCAhPSAiIikNCmdlbmVzDQpgYGANCg0KR2V0IHRoZSBUUE0gZm9yIHRoZSBnZW5lcyBpbiB0aGUgZ2VuZSBzZXQuDQoNCmBgYHtyfQ0KdHBtLmRmIDwtIGZoYy5leHByZXNzaW9uLm1hcHBlZCAlPiUgZHBseXI6OmZpbHRlcihnZW5lX2lkICVpbiUgZ2VuZXMkZ2VuZV9pZCkNCnRwbS5kZiA8LSBsZWZ0X2pvaW4odHBtLmRmLCBnZW5lcyAlPiUgZHBseXI6OnNlbGVjdChnZW5lX2lkLCBnZW5lKSwgYnkgPSBjKCJnZW5lX2lkIiA9ICJnZW5lX2lkIikpDQpyb3duYW1lcyh0cG0uZGYpIDwtIHRwbS5kZiRnZW5lDQp0cG0uZGYgPC0gdHBtLmRmICU+JSBkcGx5cjo6c2VsZWN0KGMoMTo0KSkNCnRwbS5kZiA8LSBzdWJzZXQodHBtLmRmLCBzZWxlY3QgPSAtYyhnZW5lX2lkKSApDQp0cG0uZGYgPC0gdHBtLmRmWyBvcmRlcihyb3cubmFtZXModHBtLmRmKSksIF0NCnRwbS5kZg0KYGBgDQoNClBsb3QgdGhlIHJlc3VsdHMuDQoNCmBgYHtyLCBmaWcuaGVpZ2h0PTIwLCBmaWcud2lkdGg9MTB9DQp0cG0ubWF0cml4IDwtIGFzLm1hdHJpeCh0cG0uZGYpDQpoZWF0bWFwLjIodHBtLm1hdHJpeCwgc3J0Q29sPTM2MCwgY2VsbG5vdGUgPSB0cG0ubWF0cml4LCBkZW5kcm9ncmFtPSJub25lIiwgQ29sdj1GQUxTRSwgUm93dj1GQUxTRSwNCiAgICAgICAgICBjb2w9YnJld2VyLnBhbChuID0gOSwgbmFtZSA9ICJCdVB1IilbNTo5XSwgdHJhY2U9Im5vbmUiLCBrZXkgPSBGQUxTRSwgbHdpZD1jKDAuMSw0KSwgbGhlaT1jKDAuMSw0KSwNCiAgICAgICAgICBjZXhDb2w9MSwgY2V4Um93PTAuNzUsIHN5bW0gPSBUUlVFKQ0KYGBg